package com.xn.app.muying.activity;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.xn.app.muying.R;
import com.xn.app.muying.sqlite.DBManager;
import com.xn.app.muying.util.APIMethod;
import com.xn.app.muying.util.BaseActivity;
import com.xn.app.muying.util.DateUtils;
import com.xn.app.muying.util.MyImageLoader;
import com.xn.app.muying.util.NetworkUtil;
import com.xn.app.muying.util.ToastUtil;
import com.xn.app.muying.util.UploadUtil;
import com.xn.app.muying.view.MImageView;
import com.zhuge.analysis.stat.ZhugeSDK;

import java.io.ByteArrayOutputStream;
import java.io.File;

/**
 * 上传化验单
 * Created by Administrator on 2016/12/27.
 */
public class CameraActivity extends BaseActivity {
    private TextView textview;
    private MImageView iv;
    //加载框
    AlertDialog dialog;
    File f;
    DBManager db = null;
    //上传化验单动作
    Intent intentReceiver = new Intent();
    /**
     * 图片缓存
     */
    private ImageLoader imageLoader = null;
    private DisplayImageOptions options = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        db = new DBManager(this);
        //加载并缓存图片
        imageLoader = MyImageLoader.getImageLoader(this);
        // DisplayImageOptions对象是对下载好以后的图片，在显示出来的时候做的设置
        options = new DisplayImageOptions.Builder().showImageOnLoading(0) // 在下载期间显示的图片
                .showImageForEmptyUri(0) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(0) // 设置图片加载或解码过程中发生错误显示的图片
                .bitmapConfig(Bitmap.Config.RGB_565) // 防止内存溢出的，图片太多就这这个
                .cacheInMemory(true).cacheOnDisc(true).build();
        iv = (MImageView) findViewById(R.id.activity_camera_iv);
        textview = (TextView) findViewById(R.id.textview);
        f = new File(getIntent().getStringExtra("file"));
        //图片压缩显示
        showImg();
        //上传图片
        textview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //判断网络状态
                if (NetworkUtil.isNetworkAvailable(CameraActivity.this)) {
                    /**发送广播start*/
//                    // 设置Intent action属性
//                    intentReceiver.setAction(AppConstant.MY_ACTION);
//                    //添加标识
//                    intentReceiver.putExtra("type",0);
//                    intentReceiver.putExtra("cameraLean",0);
//                    intentReceiver.putExtra("title","化验单上传中");
//                    intentReceiver.putExtra("data","正在上传化验单信息......");
//                    // 发起广播
//                    sendBroadcast(intentReceiver);
                    /**发送广播end*/
                    setImgData();
                    Intent cameraintent = new Intent(CameraActivity.this, ReadHistoryActivity.class);
                    cameraintent.putExtra("data", DateUtils.gettimeDate1());
                    startActivity(cameraintent);
                    finish();
                } else {
                    ToastUtil.showToast(CameraActivity.this, R.string.no_network_hint);
                }
            }
        });
    }

    /**
     * 图片压缩显示
     */
    private void showImg() {
        //获取bitmap对象
//        Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath());
        //显示图片
//        imageLoader.displayImage("file://" + f.getAbsolutePath(),
//                iv, options);
        //压缩图片
//        bmp = ImageCompressL(bmp);
        //保存图片
//        makeRootDirectory(Environment.getExternalStorageDirectory() + "/temp");
//        f = new File(Environment.getExternalStorageDirectory() + "/temp/" + DateUtils.getNumberDate() + ".jpg");
//        FileOutputStream out = null;
//        try {
//            out = new FileOutputStream(f);
//            if (bmp.compress(Bitmap.CompressFormat.PNG, 100, out)) {
//                out.flush();
//                out.close();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

    public static void makeRootDirectory(String filePath) {
        File file = null;
        try {
            file = new File(filePath);
            if (!file.exists()) {
                file.mkdir();
            }
        } catch (Exception e) {

        }
    }

    /**
     * 图片压缩
     *
     * @param bitmap
     * @return
     */
    private Bitmap ImageCompressL(Bitmap bitmap) {
        //图片允许最大空间   单位：KB
        double maxSize = 600.00;
        //将bitmap放至数组中，意在bitmap的大小（与实际读取的原文件要大）
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        //将字节换成KB
        double mid = b.length / 1024;
        //判断bitmap占用空间是否大于允许最大空间  如果大于则压缩 小于则不压缩
        if (mid > maxSize) {
            //获取bitmap大小 是允许最大大小的多少倍
            double i = mid / maxSize;
            //开始压缩  此处用到平方根 将宽带和高度压缩掉对应的平方根倍 （1.保持刻度和高度和原bitmap比率一致，压缩后也达到了最大大小占用空间的大小）
            bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),
                    bitmap.getHeight() / Math.sqrt(i));
        }
        return bitmap;
    }

    /***
     * 图片的缩放方法
     *
     * @param bgimage   ：源图片资源
     * @param newWidth  ：缩放后宽度
     * @param newHeight ：缩放后高度
     * @return
     */
    public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
                                   double newHeight) {
        // 获取这个图片的宽和高
        float width = bgimage.getWidth();
        float height = bgimage.getHeight();
        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        // 计算宽高缩放率
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // 缩放图片动作
        matrix.postScale(scaleWidth, scaleHeight);
        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
                (int) height, matrix, true);
        return bitmap;
    }


    /**
     * 图片上传
     */
    private void setImgData() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String str = UploadUtil.uploadFile(f, APIMethod.CaneraActivity, db.select("access_token"));
                    if (str.equals("200")) {
                        loginHandler.sendEmptyMessage(1);
                    } else {
                        loginHandler.sendEmptyMessage(2);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    loginHandler.sendEmptyMessage(2);
                }
            }
        }).start();
    }

    /**
     * 获取线程返回的数据，更新UI组件
     */
    @SuppressLint("HandlerLeak")
    Handler loginHandler = new Handler() {
        public void handleMessage(Message msg) {
            if (dialog != null) {
                dialog.dismiss();
            }
            switch (msg.what) {
                case 1:
                    deleteFile(f);
                    /**发送广播start*/
//                    // 设置Intent action属性
//                    intentReceiver.setAction(AppConstant.MY_ACTION);
//                    //添加标识
//                    intentReceiver.putExtra("type",0);
//                    intentReceiver.putExtra("cameraLean",1);
//                    intentReceiver.putExtra("title","化验单上传完成");
//                    intentReceiver.putExtra("data","化验单上传完成,点击查看结果");
//                    // 发起广播
//                    sendBroadcast(intentReceiver);
                    /**发送广播end*/
                    Intent cameraintent = new Intent(CameraActivity.this, ReadHistoryActivity.class);
                    cameraintent.putExtra("data", "");
                    startActivity(cameraintent);
                    break;
                case 2:
                    break;
                default:
                    break;
            }
        }
    };

    /**
     * 删除创建的临时文件
     *
     * @param file
     */
    public void deleteFile(File file) {
        if (file.exists()) { // 判断文件是否存在
            file.delete();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
}
